<template>
  <el-container class="layout-container-demo" style="height: 500px">
    <!-- 当 isVertical 为 true 时， is-vertical 类名会被添加到 el-aside 元素上，并设置宽度为 250px，高度为 100vh - 60px，即整个页面的高度减去顶部和底部的高度-->
    <transition name="menu">
      <el-aside v-if="isVertical" :class="{'is-vertical': isVertical}" :style="{width: isVertical ? '250px' : 'auto' , height: isVertical ? 'calc(100vh - 60px)' : '60px'}">
      <el-menu
            v-if="isVertical"
            :router="false"
            :mode="isVertical ? 'vertical' : 'horizontal'"
            :default-active="activeIndex"
            class="el-menu-demo"
            :ellipsis="!isVertical"
            :unique-opened="isVertical"
            :popper-offset="16"
            style="max-width: 600px"
            @select="handleSelect"
        >

          <el-menu-item index="0" @click="toggleDirection">
            <svg-icon name="login-logo" size="30"></svg-icon>
            <span>龙茶清欢</span>
          </el-menu-item>

          <el-sub-menu index="1">
            <template #title>
              <el-icon><message /></el-icon>Navigator One
            </template>
            <el-menu-item-group>
              <template #title>Group 1</template>
              <el-menu-item index="1-1">Option 1</el-menu-item>
              <el-menu-item index="1-2">Option 2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="Group 2">
              <el-menu-item index="1-3">Option 3</el-menu-item>
            </el-menu-item-group>
            <el-sub-menu index="1-4">
              <template #title>Option4</template>
              <el-menu-item index="1-4-1">Option 4-1</el-menu-item>
            </el-sub-menu>
          </el-sub-menu>
          <el-sub-menu index="2">
            <template #title>
              <el-icon><icon-menu /></el-icon>Navigator Two
            </template>
            <el-menu-item-group>
              <template #title>Group 1</template>
              <el-menu-item index="2-1">Option 1</el-menu-item>
              <el-menu-item index="2-2">Option 2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="Group 2">
              <el-menu-item index="2-3">Option 3</el-menu-item>
            </el-menu-item-group>
            <el-sub-menu index="2-4">
              <template #title>Option 4</template>
              <el-menu-item index="2-4-1">Option 4-1</el-menu-item>
            </el-sub-menu>
          </el-sub-menu>
          <el-sub-menu index="3">
            <template #title>
              <el-icon><setting /></el-icon>Navigator Three
            </template>
            <el-menu-item-group>
              <template #title>Group 1</template>
              <el-menu-item index="3-1">Option 1</el-menu-item>
              <el-menu-item index="3-2">Option 2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="Group 2">
              <el-menu-item index="3-3">Option 3</el-menu-item>
            </el-menu-item-group>
            <el-sub-menu index="3-4">
              <template #title>Option 4</template>
              <el-menu-item index="3-4-1">Option 4-1</el-menu-item>
            </el-sub-menu>
          </el-sub-menu>
        </el-menu>
    </el-aside>
    </transition>
    <el-container>
      <el-header :class="{'is-horizontal': !isVertical}" style="text-align: right; font-size: 12px; padding: 0; height: 60px; line-height: 60px;">
<!--        <transition name="ease-in-out"></transition>-->
        <el-menu
            v-if="!isVertical"
            :router="false"
            :mode="isVertical ? 'vertical' : 'horizontal'"
            :default-active="activeIndex"
            class="el-menu-demo"
            :ellipsis="!isVertical"
            :unique-opened="isVertical"
            :popper-offset="16"
            style="max-width: 600px"
            @select="handleSelect"
        >

          <el-menu-item index="0" @click="toggleDirection">
            <svg-icon name="login-logo" size="30"></svg-icon>
            <span>龙茶清欢</span>
          </el-menu-item>

          <el-sub-menu index="1">
            <template #title>
              <el-icon><message /></el-icon>Navigator One
            </template>
            <el-menu-item-group>
              <template #title>Group 1</template>
              <el-menu-item index="1-1">Option 1</el-menu-item>
              <el-menu-item index="1-2">Option 2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="Group 2">
              <el-menu-item index="1-3">Option 3</el-menu-item>
            </el-menu-item-group>
            <el-sub-menu index="1-4">
              <template #title>Option4</template>
              <el-menu-item index="1-4-1">Option 4-1</el-menu-item>
            </el-sub-menu>
          </el-sub-menu>
          <el-sub-menu index="2">
            <template #title>
              <el-icon><icon-menu /></el-icon>Navigator Two
            </template>
            <el-menu-item-group>
              <template #title>Group 1</template>
              <el-menu-item index="2-1">Option 1</el-menu-item>
              <el-menu-item index="2-2">Option 2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="Group 2">
              <el-menu-item index="2-3">Option 3</el-menu-item>
            </el-menu-item-group>
            <el-sub-menu index="2-4">
              <template #title>Option 4</template>
              <el-menu-item index="2-4-1">Option 4-1</el-menu-item>
            </el-sub-menu>
          </el-sub-menu>
          <el-sub-menu index="3">
            <template #title>
              <el-icon><setting /></el-icon>Navigator Three
            </template>
            <el-menu-item-group>
              <template #title>Group 1</template>
              <el-menu-item index="3-1">Option 1</el-menu-item>
              <el-menu-item index="3-2">Option 2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="Group 2">
              <el-menu-item index="3-3">Option 3</el-menu-item>
            </el-menu-item-group>
            <el-sub-menu index="3-4">
              <template #title>Option 4</template>
              <el-menu-item index="3-4-1">Option 4-1</el-menu-item>
            </el-sub-menu>
          </el-sub-menu>
        </el-menu>

        <div class="toolbar">
          <el-dropdown>
            <el-icon style="margin-right: 8px; margin-top: 1px">
              <setting />
            </el-icon>
            <template #dropdown>
              <el-dropdown-menu>
                <el-dropdown-item>View</el-dropdown-item>
                <el-dropdown-item>Add</el-dropdown-item>
                <el-dropdown-item>Delete</el-dropdown-item>
              </el-dropdown-menu>
            </template>
          </el-dropdown>
          <span>Tom</span>
        </div>
      </el-header>

      <el-main>
        <el-scrollbar>
          <el-table :data="tableData">
            <el-table-column prop="date" label="Date" width="140" />
            <el-table-column prop="name" label="Name" width="120" />
            <el-table-column prop="address" label="Address" />
          </el-table>
        </el-scrollbar>
      </el-main>
    </el-container>
  </el-container>
</template>

<script lang="ts" setup>
import { ref } from 'vue'
import { Menu as IconMenu, Message, Setting } from '@element-plus/icons-vue'

const activeIndex = ref('1')
// 默认为水平菜单，horizontal | vertical 前者为水平菜单，后者为垂直菜单
const direction = ref('horizontal')
const isVertical = ref(true) // 控制是否为垂直布局
// 切换菜单方向，同时整体切换菜单样式。同时添加过渡动画效果
const toggleDirection = () => {
  isVertical.value = !isVertical.value
  // if (direction.value === 'horizontal') {
  //   direction.value = 'vertical'
  // } else {
  //   direction.value = 'horizontal'
  // }
}

const item = {
  date: '2016-05-02',
  name: 'Tom',
  address: 'No. 189, Grove St, Los Angeles',
}
const tableData = ref(Array.from({ length: 20 }).fill(item))

// 菜单激活回调，将激活的菜单背景色设置为指定颜色
const handleSelect = (key: string, keyPath: string[]) => {
  console.log(key, keyPath)
}
</script>

<style scoped lang="scss">
.layout-container-demo .el-header {
  position: relative;
  background-color: var(--el-color-primary-light-7);
  color: var(--el-text-color-primary);
}
.layout-container-demo .el-aside {
  color: var(--el-text-color-primary);
  background: var(--el-color-primary-light-8);
}
.layout-container-demo .el-menu {
  border-right: none;
}
.layout-container-demo .el-main {
  padding: 0;
}
.layout-container-demo .toolbar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  right: 20px;
}

// 当 isVertical 为 true 时， el-aside 元素的宽度设置为 250px，并添加过渡动画效果
.is-vertical .el-aside {
  width: 200px;
  transition: all 0.5s ease-in-out;
}

// 当 isHorizontal 为 true 时， 该样式将被添加到 el-header 元素上
.is-horizontal {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 60px;
  background-color: var(--el-color-primary-light-7);
  color: var(--el-text-color-primary);
}

// 元素显示动画
.menu-enter-active {
  animation: 0.8s cubic-bezier(.25, 1, .30, 1) wipe-out-left;
}
// 元素隐藏动画
.menu-leave-active {
  animation: 0.5s cubic-bezier(.25, 1, .30, 1) wipe-out-left reverse;
}
// 从右往左折叠菜单
@keyframes wipe-out-left {
  from {
    width: 0;
    //clip-path: inset(0 250px 0 0);
  }
  to {
    width: 250px;
    //clip-path: inset(0 64px 0 0);
  }
}
</style>
